|
In computer engineering and in programming language implementations, a belt machine is a real or emulated computer that uses a FIFO queue rather than individual machine registers to evaluate each sub-expression in the program. A belt computer is programmed with an instruction set that specifies arguments explicitly but results implicitly.〔http://millcomputing.com/docs/belt/〕 The common alternative to belt machines are register machines, in which each instruction explicitly names the specific registers to use for operand argument and result locations. Belt machines are related to stack machines, which specify both arguments and results implicitly using a pushdown stack. Other alternatives are accumulator machines, which have only one visible general-purpose temp register, and memory-to-memory machines, which have no visible temp registers. A belt machine implements temporary storage with a fixed-length FIFO queue, or "belt" by analogy to a conveyor belt. The operands of the arithmetic logic units (ALUs) and other functional units may be taken from any position on the belt, and the result from the computation is "dropped" (stored) in the front position of the belt, advancing the belt to make room. As the belt is fixed length, drops in the front are matched by older operands falling off the back; pushed-off operands become inaccessible and must be explicitly saved if they are still needed for later computation. Most operations of the instruction set work only with data on the belt, not on data registers or main memory cells. For a typical instruction like Add, both argument operands come from explicitly named positions on the belt, and the result is dropped on the front, ready for the next instruction. Operations with multiple results simply drop more values at the belt front. Most belt instructions are encoded as just an opcode and two belt positions, with no additional fields to specify a result register, memory address, or literal constant. This encoding is easily extended to richer operations with more than two inputs or more than one result. Constant operands are dropped by separate Load Immediate instructions. All accessing of program variables in main memory RAM is segregated into separate Load or Store instructions containing one memory address or some way to calculate that address from belt operands. All belt machines have variants of the load/store opcodes for accessing local variables and the heap. This can be by offsets from a pointer on the belt, or by offsets from various special-purpose base registers. Similarly there will be instructions to branch to an address taken from the belt, in addition to branches relative to the program counter. == Temporal addressing == Because each drop of a result moves the previous belt content along to later positions in the queue, a particular operand continually changes its position (and hence address) as a consequence of later execution. In effect, an access to the operand at position zero is a request for the most recent value dropped to the belt, while (for example) a reference to position five is to the sixth most recent drop. Thus the addresses of belt operands reflect the belt history back in time; this is temporal addressing. It is difficult for human programmers to keep track of belt contents, and hence operand addresses, when writing assembly code for a belt machine. However it is not difficult for a compiler to track the changing contents and emit the correct position addresses in generated code. 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「Belt machine」の詳細全文を読む スポンサード リンク
|